package com.papercutting.platform.repository;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.papercutting.platform.entity.UserFavorite;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.annotations.Param;

/**
 * 用户收藏数据访问接口
 */
@Mapper
public interface UserFavoriteRepository extends BaseMapper<UserFavorite> {
    
    /**
     * 查找指定用户和目标的记录（包括已删除的记录）
     * 绕过@TableLogic逻辑删除过滤
     */
    @Select("SELECT * FROM pc_user_favorite WHERE user_id = #{userId} AND target_type = #{targetType} AND target_id = #{targetId} ORDER BY update_time DESC LIMIT 1")
    UserFavorite findRecordIgnoreDeleted(@Param("userId") Long userId, 
                                        @Param("targetType") String targetType, 
                                        @Param("targetId") Long targetId);
    
    /**
     * 恢复逻辑删除的记录（设置deleted=0）
     * 绕过@TableLogic限制，直接更新已删除的记录
     */
    @Update("UPDATE pc_user_favorite SET deleted = 0, update_time = NOW() WHERE id = #{id}")
    int restoreDeletedRecord(@Param("id") Long id);
    
    /**
     * 软删除记录（设置deleted=1）
     * 绕过@TableLogic限制，直接更新记录
     */
    @Update("UPDATE pc_user_favorite SET deleted = 1, update_time = NOW() WHERE id = #{id}")
    int softDeleteRecord(@Param("id") Long id);
    
    /**
     * 查询所有相关记录（包括已删除的）- 忽略逻辑删除标记
     */
    @Select("SELECT * FROM pc_user_favorite WHERE user_id = #{userId} AND target_type = #{targetType} AND target_id = #{targetId}")
    java.util.List<UserFavorite> findAllRecords(@Param("userId") Long userId, @Param("targetType") String targetType, @Param("targetId") Long targetId);
}